/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Teste;

import EnderecoEstoque.EnderecoEstoque;
import Nivel.Nivel;
import cargo.Cargo;
import categoria.Categoria;
import controleFalta.ControleFalta;
import descricaoProduto.DescricaoProduto;
import empresa.Empresa;
import endereco.Endereco;
import fachada.FachadaBDR;
import fornecedor.Fornecedor;
import funcionario.Funcionario;
import java.sql.Date;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import login.Login;
import org.hibernate.Query;
import org.hibernate.Transaction;
import org.hibernate.Session;
import produto.Produto;
import setor.Setor;
import setorEmpresa.SetorEmpresa;
import solicitacaoCompra.SolicitacaoCompra;
import statusProduto.StatusProduto;
import subCategoria.SubCategoria;
import org.hibernate.util.JDBCExceptionReporter;
import permissao.Permissao;
import subSetor.SubSetor;
import unidadeMedida.UnidadeMedida;
import util.HibernateUtil;
//import visao.ediProduto;

/**
 *
 * @author Alberto
 */
public class Teste_1 {

    private static Iterable<DescricaoProduto> descri;

    public static void main(String[] args) throws Exception {
        Session s = null;
        Transaction t = null;
        try {
            s = HibernateUtil.getSessionFactory().getCurrentSession();
            t = s.beginTransaction();

            Endereco objEndereco = new Endereco(1, "Irajá", "Peixinhos", "Olinda", "PE", "53220720", "Brasil", "42");
            
            Empresa objEmpresa = new Empresa(2, objEndereco, "00000000000000", "Tupan", "Vendas", "Tupan INformatica", "12345678", true,null);
            
            SetorEmpresa objSetorEmpresa = new SetorEmpresa(3, objEmpresa, "Contabilidade", "17001", true, null);
            
            EnderecoEstoque objEnderecoEstoque = new EnderecoEstoque(0, objEmpresa, "Asioasoi", "laksdlks", true, null);

//            Fornecedor objFornecedor = new Fornecedor(0, "Alberto", "albertomedeiros214@gmail.com", "12345678", "12345678", "Bom bril", true, objEndereco, null);

            Cargo objCargo = new Cargo(3, "Comprador", true, null);
            
            Permissao objPermissao = new Permissao(0, "Cadastrar Produto", true);
            
            String cpf = "11111111111";
            
            Login objLogin = new Login(0, "amedeiros", "123456");
            
            Funcionario objFuncionario = new Funcionario(0, objSetorEmpresa, objCargo, objLogin, cpf, "Albetro Medeiros", "99", true, null); 
            
            Setor objSetor = new Setor(0, objEnderecoEstoque,"Setor a", 100, 10, 50, true, true);
            SubSetor objSubSetor = new SubSetor(0, objSetor, "teste", 10, 10, 10, true);
            
            Categoria objCategoria = new Categoria(0, objSubSetor, null, "Sabão", true, null);

            SubCategoria objSubCategoria = new SubCategoria(0, objCategoria, "Sabão em Pó", true, null);

            ControleFalta objcontroleFalta = new ControleFalta(0, false, 10, 5, 6, null);
            
            UnidadeMedida objUnidadeMedida = new UnidadeMedida(1, "Caixa", "cx", null);

            StatusProduto objStatusProduto = new StatusProduto(0, "EM LOJA", true, null);
            
            
            
            FachadaBDR objFachadaBDR = FachadaBDR.getInstancia();
            
            objFachadaBDR.cadastarEnderecoEstoque(objEnderecoEstoque);
            objFachadaBDR.cadastrarSetor(objSetor);
            objFachadaBDR.cadastrarSubSetor(objSubSetor);
            objFachadaBDR.cadastrarCategoria(objCategoria);
            objFachadaBDR.cadastrarSubCategoria(objSubCategoria);
            
            objSubCategoria.setIdSubCategoria(1);
            
            DescricaoProduto objDescricaoProduto = new DescricaoProduto(0, objcontroleFalta, objSubCategoria, "porra", "PAP", true, 1);
            
            objFachadaBDR.cadastrarDescricaoProduto(objDescricaoProduto);
           // objFachadaBDR.cadastrarFuncionario(objFuncionario);
            
            objDescricaoProduto = objFachadaBDR.procurarDescricaoProduto(39);
            
            Produto objProduto = objFachadaBDR.procurarProduto(10);
                    
            List<Funcionario> listFuncionario = objFachadaBDR.listarFuncionario("");
            
            for (Funcionario objFunc : listFuncionario){
                objFuncionario = (Funcionario) objFachadaBDR.procurarFuncionario(objFunc.getIdFuncionario());
                System.out.println(objFuncionario.getObjLogin().getLogin());
                System.out.println(objFuncionario.getObjLogin().getLogin());
                System.out.println(objFuncionario.getIdFuncionario());
                objFachadaBDR.atualizarFuncionario(objFuncionario);
               // SolicitacaoCompra objSolicitacaoCompra = new SolicitacaoCompra(0, objDescricaoProduto, objFuncionario, Date.valueOf("2011-09-13"), 10, true, null);
                //objFachadaBDR.cadastrarSolicitacaoCompra(objSolicitacaoCompra);
            }
            
            /*objFachadaBDR.cadastrarPermissao(objPermissao);
            List<Permissao> listPermissao = objFachadaBDR.listarPermissao("");
            int contador = 0;
            for(Permissao objPerm : listPermissao){
                objPerm.setDescricaoPermissao("Teste : " + contador);
                
                objFachadaBDR.atualizarPermissao(objPerm);
                
                objPermissao = objFachadaBDR.procurarPermissao(objPerm.getIdPermissao());
                
                System.out.println(objPermissao.getDescricaoPermissao());
                
                if(objPermissao.getIdPermissao() == 2)
                    objFachadaBDR.removerPermissao(objPermissao.getIdPermissao());
                
                contador++;
            }
            */
            
//            objFachadaBDR.cadastrarCargo(objCargo);
//            
//            List<Cargo> listCargo = objFachadaBDR.listarCargo("");
//            int contador = 0;
//            for(Cargo objCar : listCargo){
//                objCar.setDescricaoCargo("Teste :" + contador);
//                
//                objFachadaBDR.atualizarCargo(objCar);
//                
//                objCargo = objFachadaBDR.procurarCargo(objCar.getIdCargo());
//                
//                System.out.println(objCar.getDescricaoCargo());
//                
//                if(objCar.getIdCargo() == 2)
//                    objFachadaBDR.removerCargo(objCar.getIdCargo());
//                
//                contador++;
//            }
            
//            objFachadaBDR.cadastrarSetorEmpresa(objSetorEmpresa);
//            
//            List<SetorEmpresa> listSetorEmpresa = objFachadaBDR.listarSetorEmpresa("");
////            
//            int contador = 0;
//            for(SetorEmpresa objSetorEmp : listSetorEmpresa){
//                objSetorEmp.setDescricaoSetor("teste :" + contador);
//                objFachadaBDR.atualizarSetorEmpresa(objSetorEmp);
//
//                objSetorEmpresa = objFachadaBDR.procurarSetorEmpresa(objSetorEmp.getIdSetorEmpresa());
//                
//                if(objSetorEmpresa.getIdSetorEmpresa() == 7){
//                    System.out.println(objSetorEmpresa.getDescricaoSetor());
//                    objFachadaBDR.removerSetorEmpresa(objSetorEmpresa.getIdSetorEmpresa());
//                }
//                
//                contador++;
//            }
            
//            
//            objEnderecoEstoque = objFachadaBDR.procurarEnderecoEstoque(2);
//            
//            Setor objSetor = null;//new Setor(0, objEnderecoEstoque, "Setor A", 10, 20, 20, true, true);
//            
//            objSetor = (Setor) objFachadaBDR.procurarSetor(260);
//            
//            SubSetor objSubSetor = null;//new SubSetor(0, objSetor, "teste", 10, 10, 10, true);
//            
//            objSubSetor = (SubSetor) objFachadaBDR.procurarSubSetor(13);
            
            /*List<SubSetor> listSubSetor = objFachadaBDR.listarSubSetor("");
            List<Nivel> listNivel = objFachadaBDR.listarNivel("");
            List<EnderecoEstoque> listEnderecoEstoque = objFachadaBDR.listarEnderecoEstoque("");
            List<Categoria> listCategoria = objFachadaBDR.listarCategoria("") ;
            objFachadaBDR.listarDescricaoProduto("") ;
            objFachadaBDR.listarFornecedor("");
            objFachadaBDR.listarProduto("");
            objFachadaBDR.listarSetor("");
            objFachadaBDR.listarSubCategoria("");
            objFachadaBDR.listarSubSetor("");
            
            
            /* EnderecoEstoque objEnderecoEstoque = objFachadaBDR.procurarEnderecoEstoque(4);
            
            Setor objSetor = new Setor(0, objEnderecoEstoque, "Paulo Tanga", 10, 10, 10, true, false);
            objFachadaBDR.cadastrarSetor(objSetor);
            
            objSetor = (Setor) objFachadaBDR.procurarSetor(objSetor.getIdSetor());
            SubSetor objSubSetor = new SubSetor(0, objSetor, "teste", 10, 10, 10, true);
            objFachadaBDR.cadastrarSubSetor(objSubSetor);
            
            List<SubSetor> listSubSetor = objFachadaBDR.listarSubSetor();
            int intContador = 1;
            for(SubSetor objSubSe: listSubSetor){
            objSubSe.setDescricaoSubSetor("Teste: " + intContador);
            
            objFachadaBDR.atualizarSubSetor(objSubSe);
            
            objSubSetor = objFachadaBDR.procurarSubSetor(objSubSe.getIdSubSetor());
            
            if(objSubSetor.getIdSubSetor() == 9)
            objFachadaBDR.removerSubSetor(objSubSetor.getIdSubSetor());
            
            intContador++;
            }
            /* Nivel objNivel = new Nivel(0, objSetor, "Nivel b", true);
            
            objFachadaBDR.cadastrarNivel(objNivel);
            
            List<Nivel> listNivel = objFachadaBDR.listarNivel();
            int intContador = 1;
            for(Nivel objN : listNivel){
            objN.setDescricaoNivel("Teste : " + intContador);
            
            objFachadaBDR.atualizarNivel(objN);
            
            if(objN.getIdNivel() == 7 || objN.getIdNivel() == 15){
            objFachadaBDR.removerNivel(objN.getIdNivel());
            }
            intContador++;
            }
             */
//            objFachadaBDR.cadastarEnderecoEstoque(objEnderecoEstoque);

//            List<EnderecoEstoque> listEnderecoEstoque = objFachadaBDR.listarEnderecoEstoque("");
//            int intContador = 1;
//            for(EnderecoEstoque objEnderecoE : listEnderecoEstoque){
//                objEnderecoE.setDescricaoEndereco("Teste : " + intContador);
//                
//                objFachadaBDR.atualizarEnderecoEstoque(objEnderecoE);
//                
//                objEnderecoE = objFachadaBDR.procurarEnderecoEstoque(objEnderecoE.getIdEndereco());
//                
//                System.out.println(objEnderecoE.getDescricaoEndereco());
//                
//                if(objEnderecoE.getIdEndereco() == 178)
//                       objFachadaBDR.removerEnderecoEstoque(objEnderecoE.getIdEndereco());
//                
//                intContador++;
//            }

            //objFachadaBDR.cadastrarFornecedor(objFornecedor);

//            for(int i = 1; i < 100 ; i++){
//                objFornecedor.setIdFornecedor(0);
//                objFachadaBDR.cadastrarFornecedor(objFornecedor);
//            }

            /* List<Fornecedor> listProduto = objFachadaBDR.listarFornecedor();
            
            int intContador = 1;
            for(Fornecedor objFor : listProduto){
            System.out.println("Atualizar");
            objFor.setDescricaoFornecedor("Teste: " + intContador);
            objFachadaBDR.atualizarFornecedor(objFor);
            
            System.out.println("Procurar");
            Fornecedor objFornecedorBanco = (Fornecedor) objFachadaBDR.procurarFornecedor(objFor.getIdFornecedor());
            
            if(objFornecedorBanco.getIdFornecedor() == 1320) {               
            System.out.println("Remover");
            objFachadaBDR.removerFornecedor(objFor.getIdFornecedor());
            }
            intContador++;
            }*/

            /* s.save(objEndereco);
            // s.save(objEnderecoEstoque);
            s.save(objSetor);
            s.save(objCategoria);
            s.save(objSubCategoria);
            // s.save(objDescricaoProduto);
            
            s.save(objFornecedor);
            s.save(objStatusProduto);
            //s.saveOrUpdate(p);
            
            t.commit();
            
            s = HibernateUtil.getSessionFactory().getCurrentSession();
            t = s.beginTransaction();
            t.begin();
            
            //Query q = s.getNamedQuery("descricaoProduto.listar");
            
            
            t.commit();
            
            FachadaBDR objFachadaBDR = FachadaBDR.getInstancia();
            
            objSubCategoria.setIdSubCategoria(0);
            
            objFachadaBDR.cadastrarSubCategoria(objSubCategoria);
            
            //System.out.println(objSubCategoria.getIdSubCategoria());
            
            objFachadaBDR.cadastrarDescricaoProduto(objDescricaoProduto);
            
            objDescricaoProduto.setIdDescricaoProduto(0);
            
            objFachadaBDR.cadastrarDescricaoProduto(objDescricaoProduto);
            
            objCategoria.setNome("Teste");
            
            objFachadaBDR.cadastrarCategoria(objCategoria);
            
            List<Categoria> listCategoria = objFachadaBDR.listarCategoria();
            
            for (Categoria objcat : listCategoria){
            System.out.println("Id Caegoria: " + objcat.getIdCategoria());
            System.out.println("Nome Caegoria: " + objcat.getNome());
            
            if(objcat.getIdCategoria() == 29){
            System.out.println("Removida Caegoria: " + objcat.getNome());
            objFachadaBDR.removerCategoria(objcat.getIdCategoria());
            System.exit(0);
            }
            }
            
            //objFachadaBDR.cadastrarProduto(p);
            p.setIdProduto(0);
            //p.setNotaProduto(87897);
            //objFachadaBDR.cadastrarProduto(p);
            p.setIdProduto(0);
            p.setNotaProduto(76576);
            //objFachadaBDR.cadastrarProduto(p);
            
            List<SubCategoria> listSubCategoria = objFachadaBDR.listarSubCategoria();
            
            for (SubCategoria sub : listSubCategoria) {
            
            System.out.println("Sub Categoria: " + sub.getNome());
            for (DescricaoProduto desc : sub.getDescricaoProdutos()){
            System.out.println("Descrição: " + desc.getDecsricaoProduto());
            
            desc = objFachadaBDR.procurarDescricaoProduto(desc.getIdDescricaoProduto());
            
            System.out.println("Sontrole: " + desc.getControleFalta());
            }
            
            }*/

        } catch (Exception e) {
            if (t.isActive()) {
                t.rollback();
            }
            System.out.println("aErro: " + e.getMessage());
            System.out.println(e.getStackTrace());

            // s.close();
            System.exit(0);

        }
    }
}